package com.example.shiro.utils;
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;

public class ShiroPasswordUtil {

    // 算法名称
    public static final String ALGORITHM_NAME = "MD5";

    // 散列迭代次数
    public static final int HASH_ITERATIONS = 5;

    /**
     * 生成随机盐值
     */
    public static String generateSalt() {
        return new SecureRandomNumberGenerator().nextBytes().toHex();
    }

    /**
     * 加密密码
     * @param password 原始密码
     * @param salt 盐值
     * @return 加密后的密码
     */
    public static String encryptPassword(String password, String salt) {
        return new SimpleHash(
                ALGORITHM_NAME,
                password,
                ByteSource.Util.bytes(salt),
                HASH_ITERATIONS
        ).toHex();
    }

    /**
     * 验证密码
     * @param plainPassword 原始密码
     * @param salt 盐值
     * @param encryptedPassword 加密后的密码
     * @return 验证结果
     */
    public static boolean verifyPassword(
            String plainPassword,
            String salt,
            String encryptedPassword) {
        String calculatedHash = encryptPassword(plainPassword, salt);
        return calculatedHash.equals(encryptedPassword);
    }
}